package com.springframework.beans.factory.support;

import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.lang.Nullable;

/**
 * @Author 虎哥
 * @Description BeanDefinition 读取器，定义了加载资源的方法
 * BeanDefinition 读取器
 * <p>
 * 要带着问题去学习,多猜想多验证
 **/
public interface MyBeanDefinitionReader {
    /**
     * 返回 BeanDefinition 注册中心
     */
    MyBeanDefinitionRegistry getRegistry();

    /**
     * 返回 Resource 资源加载器，默认为 PathMatchingResourcePatternResolver
     */
    @Nullable
    ResourceLoader getResourceLoader();

    /**
     * 返回类加载器
     */
    @Nullable
    ClassLoader getBeanClassLoader();

    /**
     * 返回 Bean 的名称生成器，默认为 DefaultBeanNameGenerator
     */
    MyBeanNameGenerator getBeanNameGenerator();


    /**
     * 从 Resource 资源中加载 BeanDefinition 并返回数量
     */
    int loadBeanDefinitions(Resource resource) throws Exception;

    int loadBeanDefinitions(Resource... resources) throws Exception;

    int loadBeanDefinitions(String location) throws Exception;

    int loadBeanDefinitions(String... locations);
}
